﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Windows.Forms;
using LarDosIdosos.Business.Model;
using LarDosIdosos.DataSources;

namespace LarDosIdosos
{
    public partial class CadastroSaidaProduto : System.Web.UI.Page
    {
        private Business.Model.Funcionario funcionario;
        private const string Acesso = "acesso";
        private static string paginaDeOrigem;
        protected void Page_Load(object sender, EventArgs e)
        {
            CarregaFuncionario();
            CarregaGridFuncionario();
            if (!ValidaPermissao("acesso"))
            {
                Response.Redirect("~/Default.aspx");
            }
            CarregaDropDownTiposDeProduto();
            if (!IsPostBack && !IsCallback)
            {
                //Se não for postback salva a url de origem para quando o usuario clicar em voltar ele volte para o local de origem
                paginaDeOrigem = "~" + HttpContext.Current.Request.UrlReferrer.LocalPath;
            }
        }


        /// <summary>
        /// Carrega a grid com os dados do funcionário que está cadastrando
        /// </summary>
        private void CarregaGridFuncionario()
        {
            List<Funcionario> list = new List<Funcionario>();
            list.Add(funcionario);
            gridViewFuncionario.DataSource = list;
            gridViewFuncionario.DataBind();
        }

        private void CarregaFuncionario()
        {
            if (Session["usuario"] != null)
            {
                funcionario = (Business.Model.Funcionario)Session["usuario"];
            }
        }

        //Note: Valida a permissão do funcionário
        private bool ValidaPermissao(string tipo)
        {
            if (funcionario != null)
            {
                switch (tipo)
                {
                    case Acesso:
                        if (funcionario.Cargo_Funcionario.CodigoCargo == 1 || funcionario.Cargo_Funcionario.CodigoCargo == 3)
                        {
                            return true;
                        }
                        break;
                }
            }
            return false;
        }

        private void CarregaDropDownTiposDeProduto()
        {
            if (dropDownListTipoDeProduto.Items.Count == 0)
            {
                DataSources.DataSourceTipoDeProduto dataSourceTipoDeDoacao = new DataSourceTipoDeProduto();
                List<TipoProduto> list = dataSourceTipoDeDoacao.BuscaTodosOsTiposDeProduto();
                dropDownListTipoDeProduto.Items.Add(new ListItem("", "0"));
                foreach (var tipoDoacao in list)
                {
                    dropDownListTipoDeProduto.Items.Add(new ListItem(tipoDoacao.Nome_Tipo_Produto, tipoDoacao.Codigo_Tipo_Produto.ToString()));
                }
            }
        }

        private void CarregaDropDownProdutos(string codigo_tipo_produto)
        {
            DataSourceProduto dataSourceProduto = new DataSourceProduto();
            List<Produto> listProduto = dataSourceProduto.BuscaTodosProdutos();
            IEnumerable<Produto> listProdutoPorTipo = from p in listProduto
                                                      where p.Tipo_Produto.Codigo_Tipo_Produto.ToString() == codigo_tipo_produto
                                                      select p;
            dropDownListProdutos.Items.Clear();
            dropDownListProdutos.Items.Add(new ListItem("", "0"));
            foreach (var produto in listProdutoPorTipo)
            {
                dropDownListProdutos.Items.Add(new ListItem(produto.Nome_Produto,
                                                                    produto.Codigo_Produto.ToString()));
            }
        }

        private string ObtemUnidadeDeMedida(string codigo)
        {
            DataSourceProduto dataSourceProduto = new DataSourceProduto();
            Produto produto = dataSourceProduto.BuscaProduto(codigo);
            DataSourceUnidadeDeMedida dataSourceUnidadeDeMedida = new DataSourceUnidadeDeMedida();
            UnidadeDeMedida unidadeDeMedida = (from u in dataSourceUnidadeDeMedida.BuscaTodasUnidadesDeMedida() where u.Codigo_Unidade_De_Medida == produto.Unidade_De_Medida.Codigo_Unidade_De_Medida select u).First();
            return unidadeDeMedida.Sigla_Unidade_De_Medida;

        }

        protected void dropDownListTipoDeProduto_OnSelectedIndexChanged(object sender, EventArgs e)
        {
            DropDownList dropDownList = (DropDownList)sender;
            string codigo = dropDownList.SelectedValue;
            CarregaDropDownProdutos(codigo);
        }

        protected void dropDownListProdutos_OnSelectedIndexChanged(object sender, EventArgs e)
        {
            DropDownList dropDownList = (DropDownList)sender;
            string codigo = dropDownList.SelectedValue;
            labelUnidadeDeMedida.Text = ObtemUnidadeDeMedida(codigo);
        }

        protected void buttonSalvar_Onclick(object sender, EventArgs e)
        {
            try
            {
                ArmazenaCadastro();
            }
            catch (Exception ex)
            {

            }
        }

        private void ArmazenaCadastro()
        {
            try
            {
                SaidaProduto saida = new SaidaProduto();

                saida.Produto.Codigo_Produto = Convert.ToInt32(dropDownListProdutos.SelectedValue);
                saida.Data_Saida = DateTime.Now;

                if (gridViewFuncionario.Rows.Count > 0)
                {
                    var codigoFuncionario = ((HiddenField)gridViewFuncionario.Rows[0].FindControl("hiddenFieldId")).Value;
                    saida.FuncionarioSaidaProduto.Codigo_Funcionario = codigoFuncionario == "" ? 0 : Convert.ToInt32(codigoFuncionario);
                }

                saida.Quantidade = Convert.ToInt32(TextBoxQuantidade.Text);

                DataSourceSaida dataSource = new DataSourceSaida();

                int total = dataSource.InsertSaida(saida);

                FinalizaCadastroComSucesso("Salvo com sucesso!");
            }
            catch (Exception ex)
            {
                FinalizaCadastroComErro("Erro ao Cadastrar Entrada.");
            }

        }

        private void FinalizaCadastroComSucesso(string mensagem)
        {
//            MessageBox.Show(mensagem, "Sucesso", MessageBoxButtons.OK,
//                               MessageBoxIcon.None, MessageBoxDefaultButton.Button1,
//                               MessageBoxOptions.ServiceNotification, false);
			labelFeedBack.Text="Salvo com Sucesso!";
			labelFeedBack.Attributes.Add("Style","color:#00FF00");
        }

        private void FinalizaCadastroComErro(string mensagem)
        {
//            MessageBox.Show(mensagem, "Erro", MessageBoxButtons.OK,
//                               MessageBoxIcon.Error, MessageBoxDefaultButton.Button1,
//                               MessageBoxOptions.ServiceNotification, false);
			labelFeedBack.Text="Erro! <br/>"+mensagem;
			labelFeedBack.Attributes.Add("Style","color:#FF0000");
        }

        protected void linkButtonVoltar_OnClick(object sender, EventArgs e)
        {
            Response.Redirect(paginaDeOrigem);
        }
    }
}